/**
 * Copyright (c) 2011-2014, homeant (homeanter@163.com).
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package xin.homeant.sharding.jdbc.algorithm;

import java.util.Collection;
import java.util.LinkedHashSet;

import com.dangdang.ddframe.rdb.sharding.api.ShardingValue;
import com.google.common.collect.Range;

/**
 * <P>
 * TODO
 * </P>
 * 
 * @author homeant homeanter@163.com
 * @Data 2017年6月2日 下午2:15:12
 */
public class SingleKeyTableShardingAlgorithm implements com.dangdang.ddframe.rdb.sharding.api.strategy.table.SingleKeyTableShardingAlgorithm<Integer>{

	@Override
	public String doEqualSharding(Collection<String> tableNames, ShardingValue<Integer> shardingValue) {
		for (String each : tableNames) {
			//if(each.endsWith(shardingValue.getValue() % 2 + "")){
				return each;
			//}
        }
        throw new IllegalArgumentException();  
	}

	@Override
	public Collection<String> doInSharding(Collection<String> tableNames, ShardingValue<Integer> shardingValue) {
		Collection<String> result = new LinkedHashSet<String>(tableNames.size());
        for (Integer value : shardingValue.getValues()) {  
            for (String tableName : tableNames) {  
                //if (tableName.endsWith(value % 2 + "")) {  
                    result.add(tableName);  
                //}
            }  
        }  
        return result;
	}

	@Override
	public Collection<String> doBetweenSharding(Collection<String> tableNames,
			ShardingValue<Integer> shardingValue) {
		Collection<String> result = new LinkedHashSet<String>(tableNames.size());  
        Range<Integer> range = (Range<Integer>) shardingValue.getValueRange();  
        for (Integer i = range.lowerEndpoint(); i <= range.upperEndpoint(); i++) {  
            for (String each : tableNames) {  
                //if (each.endsWith(i % 2 + "")) {  
                    result.add(each);  
                //}
            }  
        }  
        return result; 
	}

}
